home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / msdos / raytrace / pov / bin / xtras / povproto.h < prev    next >
C/C++ Source or Header  |  1994-09-11  |  32KB  |  614 lines

  1. /****************************************************************************
  2. *
  3. *  ATTENTION!!!
  4. *
  5. *  THIS FILE HAS BEEN MODIFIED!!! IT IS NOT PART OF THE OFFICAL
  6. *  POV-RAY 2.2 DISTRIBUTION!!!
  7. *
  8. *  THIS FILE IS PART OF "FASTER THAN POV-RAY" (VERSION 2.2),
  9. *  A SPED-UP VERSION OF POV-RAY 2.2. USE AT YOUR OWN RISK!!!!!!
  10. *
  11. *  New files: addon0.c, addon1.c, addon2.c, addon3.c, addon.h
  12. *
  13. *  The additional modules were written by Dieter Bayer.
  14. *
  15. *  Send comments, suggestions, bugs, ideas ... to:
  16. *
  17. *  e-mail: dieter@cip.e-technik.uni-erlangen.de
  18. *  CIS: 100255.3074
  19. *
  20. *  All changed/added lines are enclosed in #ifdef DB_CODE ... #endif
  21. *
  22. *  The vista projection was taken from:
  23. *
  24. *    A. Hashimoto, T. Akimoto, K. Mase, and Y. Suenaga, 
  25. *    "Vista Ray-Tracing: High Speed Ray Tracing Using Perspective
  26. *    Projection Image", New Advances in Computer Graphics, Proceedings
  27. *    of CG International '89, R. A. Earnshaw, B. Wyvill (Eds.), 
  28. *    Springer, ..., pp. 549-560
  29. *
  30. *  The idea for the light buffer was taken from:
  31. *
  32. *    E. Haines and D. Greenberg, "The Light Buffer: A Shadow-Testing 
  33. *    Accelerator", IEEE CG&A, Vol. 6, No. 9, Sept. 1986, pp. 6-16
  34. *
  35. *****************************************************************************/
  36.  
  37. /****************************************************************************
  38. *                   povproto.h
  39. *
  40. *  This module defines the prototypes for all system-independent functions.
  41. *
  42. *  from Persistence of Vision Raytracer
  43. *  Copyright 1993 Persistence of Vision Team
  44. *---------------------------------------------------------------------------
  45. *  NOTICE: This source code file is provided so that users may experiment
  46. *  with enhancements to POV-Ray and to port the software to platforms other
  47. *  than those supported by the POV-Ray Team.  There are strict rules under
  48. *  which you are permitted to use this file.  The rules are in the file
  49. *  named POVLEGAL.DOC which should be distributed with this file. If 
  50. *  POVLEGAL.DOC is not available or for more info please contact the POV-Ray
  51. *  Team Coordinator by leaving a message in CompuServe's Graphics Developer's
  52. *  Forum.  The latest version of POV-Ray may be found there as well.
  53. *
  54. * This program is based on the popular DKB raytracer version 2.12.
  55. * DKBTrace was originally written by David K. Buck.
  56. * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
  57. *
  58. *****************************************************************************/
  59.  
  60. /* Prototypes for functions defined in povray.c */
  61. void usage PARAMS((void));
  62. void init_vars PARAMS((void));
  63. void close_all PARAMS((void));
  64. void get_defaults PARAMS((void));
  65. void read_options PARAMS((char *File_Name));
  66. void parse_option PARAMS((char *Option_String));
  67. void Print_Options PARAMS((void));
  68. void parse_file_name PARAMS((char *File_Name));
  69. void print_stats PARAMS((void));
  70. FILE *Locate_File PARAMS((char *filename, char *mode));
  71. void print_credits PARAMS((void));
  72.  
  73. /* Prototypes for functions defined in render.c */
  74. void Create_Ray PARAMS((RAY *ray, int width, int height, DBL x, DBL y));
  75. void Supersample PARAMS((COLOUR *result, int x, int y, int Width,int Height));
  76. void Read_Rendered_Part PARAMS((void));
  77. void Start_Tracing PARAMS((void));
  78. void Initialize_Renderer PARAMS((void));
  79. void Trace PARAMS((RAY *Ray, COLOUR *Colour));
  80. void Check_User_Abort PARAMS((int Do_Stats));
  81.  
  82. /* Prototypes for functions defined in bound.c */
  83. void Destroy_Composite PARAMS((OBJECT *Object));
  84. void BuildBoundingSlabs PARAMS((OBJECT **Root));
  85. void recompute_bbox PARAMS((BBOX *bbox, TRANSFORM *trans));
  86. void Recompute_Inverse_BBox PARAMS((BBOX *bbox, TRANSFORM *trans));
  87. int Bounds_Intersect PARAMS((OBJECT *Root, RAY *ray, INTERSECTION *Best_Intersection, OBJECT **Best_Object));
  88. #ifdef DB_CODE
  89. /*these functions have be available globally */
  90. void PriorityQueueInsert PARAMS((Qelem *Queue, unsigned *Qsize, DBL key, OBJECT *obj));
  91. void CheckAndEnqueue PARAMS((Qelem *Queue, unsigned *Qsize, OBJECT *obj, BBOX *Bounds, RAYINFO *rayinfo));
  92. void PriorityQueueDelete PARAMS((Qelem *Queue, unsigned *Qsize, DBL *key, OBJECT **obj));
  93. #endif
  94.  
  95. /* Prototypes for functions defined in tokenize.c */
  96. void Initialize_Tokenizer PARAMS((char *filename));
  97. void Terminate_Tokenizer PARAMS((void));
  98. void Get_Token PARAMS((void));
  99. void Unget_Token PARAMS((void));
  100. int Skip_Spaces PARAMS((DATA_FILE *Data_File));
  101. int Parse_C_Comments PARAMS((DATA_FILE *Data_File));
  102. void Begin_String PARAMS((void));
  103. void Stuff_Character PARAMS((int c, DATA_FILE *Data_File));
  104. void End_String PARAMS((DATA_FILE *Data_File));
  105. int Read_Float PARAMS((DATA_FILE *Data_File));
  106. void Parse_String PARAMS((DATA_FILE *Data_File));
  107. int Read_Symbol PARAMS((DATA_FILE *Data_File));
  108. int Find_Reserved PARAMS((void));
  109. int Find_Symbol PARAMS((void));
  110. void Token_Error PARAMS((DATA_FILE *Data_File, char *str));
  111.  
  112. /* Prototypes for functions defined in parse.c */
  113. void Parse_Error PARAMS((TOKEN Token_Id));
  114. void Parse_Error_Str PARAMS((char *str));
  115. void Parse_Begin PARAMS((void));
  116. void Parse_End PARAMS((void));
  117. void Parse_Colour PARAMS((COLOUR *Colour));
  118. COLOUR_MAP *Parse_Colour_Map PARAMS((void));
  119. COLOUR_MAP *Parse_Colour_List PARAMS((int MinCount));
  120. void Parse_Comma PARAMS((void));
  121. DBL Parse_Float PARAMS((void));
  122. void Parse_Vector PARAMS((VECTOR *Vector));
  123. void Parse_Vector_Float PARAMS((VECTOR *Vector));
  124. void Parse_Vector PARAMS((VECTOR *Vector));
  125. void Parse_Scale_Vector PARAMS((VECTOR *Vector));
  126. void Parse PARAMS((void));
  127. void Write_Token PARAMS((TOKEN Token_Id, DATA_FILE *Data_File));
  128. void Error PARAMS((char *str));
  129. void MAError PARAMS((char *str));
  130. void Warn PARAMS((char *str, DBL Level));
  131.  
  132. /* Prototypes for functions defined in objects.c */
  133. int Intersection PARAMS((INTERSECTION *Ray_Intersection, OBJECT *Object, RAY *Ray));
  134. int Ray_In_Bounds PARAMS((RAY *Ray, OBJECT *Bounds));
  135. int Point_In_Clip PARAMS((VECTOR *IPoint, OBJECT *Clip));
  136. OBJECT *Copy_Bound_Clip PARAMS((OBJECT *Old));
  137. OBJECT *Copy_Object PARAMS((OBJECT *Old));
  138. void Translate_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  139. void Rotate_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  140. void Scale_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  141. void Transform_Object PARAMS((OBJECT *Object, TRANSFORM *Trans));
  142. int Inside_Object PARAMS((VECTOR *IPoint, OBJECT *Vector));
  143. void Invert_Object PARAMS((OBJECT *Object));
  144. void Destroy_Object PARAMS((OBJECT *Object));
  145. void create_istack PARAMS((void));
  146. ISTACK *open_istack PARAMS((void));
  147. void close_istack PARAMS((ISTACK *istk));
  148. void incstack PARAMS((ISTACK *istk));
  149.  
  150. /* Prototypes for functions defined in spheres.c */
  151. int All_Sphere_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  152. int All_Ellipsoid_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  153. int Intersect_Sphere PARAMS((RAY *Ray, SPHERE *Sphere, DBL *Depth1, DBL *Depth2));
  154. int Inside_Sphere PARAMS((VECTOR *IPoint, OBJECT *Object));
  155. int Inside_Ellipsoid PARAMS((VECTOR *IPoint, OBJECT *Object));
  156. void Sphere_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  157. void Ellipsoid_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  158. void *Copy_Sphere PARAMS((OBJECT *Object));
  159. void Translate_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  160. void Rotate_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  161. void Scale_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  162. void Transform_Sphere PARAMS((OBJECT *Object, TRANSFORM *Trans));
  163. void Invert_Sphere PARAMS((OBJECT *Object));
  164. void Destroy_Sphere PARAMS((OBJECT *Object));
  165. SPHERE *Create_Sphere PARAMS((void));
  166.  
  167. /* Prototypes for functions defined in quadrics.c */
  168. int All_Quadric_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  169. int Intersect_Quadric PARAMS((RAY *Ray, QUADRIC *Quadric, DBL *Depth1, DBL *Depth2));
  170. int Inside_Quadric PARAMS((VECTOR *IPoint, OBJECT *Object));
  171. void Quadric_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  172. void *Copy_Quadric PARAMS((OBJECT *Object));
  173. void Quadric_To_Matrix PARAMS((QUADRIC *Quadric, MATRIX *Matrix));
  174. void Matrix_To_Quadric PARAMS((MATRIX *Matrix, QUADRIC *Quadric));
  175. void Translate_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  176. void Rotate_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  177. void Scale_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  178. void Transform_Quadric PARAMS((OBJECT *Object, TRANSFORM *Trans));
  179. void Invert_Quadric PARAMS((OBJECT *Object));
  180. void Destroy_Quadric PARAMS((OBJECT *Object));
  181. QUADRIC *Create_Quadric PARAMS((void));
  182.  
  183. /* Prototypes for functions defined in poly.c */
  184. int All_Poly_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  185. int Inside_Poly PARAMS((VECTOR *IPoint, OBJECT *Object));
  186. void Poly_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  187. void *Copy_Poly PARAMS((OBJECT *Object));
  188. void Translate_Poly PARAMS((OBJECT *Object, VECTOR *Vector));
  189. void Rotate_Poly PARAMS((OBJECT *Object, VECTOR *Vector));
  190. void Scale_Poly PARAMS((OBJECT *Object, VECTOR *Vector));
  191. void Transform_Poly PARAMS((OBJECT *Object, TRANSFORM *Trans));
  192. void Invert_Poly PARAMS((OBJECT *Object));
  193. void Destroy_Poly PARAMS((OBJECT *Object));
  194. POLY *Create_Poly PARAMS((int Order));
  195.  
  196. /* Prototypes for functions defined in bezier.c */
  197. void Precompute_Patch_Values PARAMS((BICUBIC_PATCH *Shape));
  198. int All_Bicubic_Patch_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  199. int Inside_Bicubic_Patch PARAMS((VECTOR *IPoint, OBJECT *Object));
  200. void Bicubic_Patch_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  201. void *Copy_Bicubic_Patch PARAMS((OBJECT *Object));
  202. void Translate_Bicubic_Patch PARAMS((OBJECT *Object, VECTOR *Vector));
  203. void Rotate_Bicubic_Patch PARAMS((OBJECT *Object, VECTOR *Vector));
  204. void Scale_Bicubic_Patch PARAMS((OBJECT *Object, VECTOR *Vector));
  205. void Transform_Bicubic_Patch PARAMS((OBJECT *Object, TRANSFORM *Trans));
  206. void Invert_Bicubic_Patch PARAMS((OBJECT *Object));
  207. BICUBIC_PATCH *Create_Bicubic_Patch PARAMS((void));
  208. void Destroy_Bicubic_Patch PARAMS((OBJECT *Object));
  209.  
  210. /* Prototypes for functions defined in boxes.c */
  211. int All_Box_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  212. int Intersect_Boxx PARAMS((RAY *Ray, BOX *box, DBL *Depth1, DBL *Depth2));
  213. int Inside_Box PARAMS((VECTOR *point, OBJECT *Object));
  214. void Box_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  215. void *Copy_Box PARAMS((OBJECT *Object));
  216. void Translate_Box PARAMS((OBJECT *Object, VECTOR *Vector));
  217. void Rotate_Box PARAMS((OBJECT *Object, VECTOR *Vector));
  218. void Scale_Box PARAMS((OBJECT *Object, VECTOR *Vector));
  219. void Transform_Box PARAMS((OBJECT *Object, TRANSFORM *Trans));
  220. void Invert_Box PARAMS((OBJECT *Object));
  221. BOX *Create_Box PARAMS((void));
  222. void Destroy_Box PARAMS((OBJECT *Object));
  223.  
  224. /* Prototypes for functions defined in blob.c */
  225. void Set_Blob_Solver PARAMS((OBJECT *obj, int Sturm_Flag));
  226. int All_Blob_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  227. void BlobDelete PARAMS((OBJECT *obj));
  228. int Inside_Blob PARAMS((VECTOR *point, OBJECT *Object));
  229. void Blob_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  230. void *Copy_Blob PARAMS((OBJECT *Object));
  231. void Translate_Blob PARAMS((OBJECT *Object, VECTOR *Vector));
  232. void Rotate_Blob PARAMS((OBJECT *Object, VECTOR *Vector));
  233. void Scale_Blob PARAMS((OBJECT *Object, VECTOR *Vector));
  234. void Invert_Blob PARAMS((OBJECT *Object));
  235. void Transform_Blob PARAMS((OBJECT *Object, TRANSFORM *Trans));
  236. BLOB *Create_Blob PARAMS((void));
  237. void Destroy_Blob PARAMS((OBJECT *Object));
  238. void MakeBlob PARAMS((BLOB *blob, DBL threshold, blobstackptr bloblist,
  239.               int npoints, int sflag));
  240.  
  241. /* Prototypes for functions defined in cones.c */
  242. int All_Cone_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  243. int Inside_Cone PARAMS((VECTOR *point, OBJECT *Object));
  244. void Cone_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  245. void *Copy_Cone PARAMS((OBJECT *Object));
  246. void Translate_Cone PARAMS((OBJECT *Object, VECTOR *Vector));
  247. void Rotate_Cone PARAMS((OBJECT *Object, VECTOR *Vector));
  248. void Scale_Cone PARAMS((OBJECT *Object, VECTOR *Vector));
  249. void Transform_Cone PARAMS((OBJECT *Object, TRANSFORM *Trans));
  250. void Invert_Cone PARAMS((OBJECT *Object));
  251. CONE *Create_Cone PARAMS((void));
  252. CONE *Create_Cylinder PARAMS((void));
  253. void Compute_Cone_Data PARAMS((OBJECT *Object));
  254. void Compute_Cylinder_Data PARAMS((OBJECT *Object));
  255. void Destroy_Cone PARAMS((OBJECT *Object));
  256.  
  257. /* Prototypes for functions defined in cones.c */
  258. int All_Disc_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  259. int Intersect_Disc PARAMS((RAY *Ray, DISC *Disc, DBL *Depth));
  260. int Inside_Disc PARAMS((VECTOR *point, OBJECT *Object));
  261. void Disc_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  262. void *Copy_Disc PARAMS((OBJECT *Object));
  263. void Translate_Disc PARAMS((OBJECT *Object, VECTOR *Vector));
  264. void Rotate_Disc PARAMS((OBJECT *Object, VECTOR *Vector));
  265. void Scale_Disc PARAMS((OBJECT *Object, VECTOR *Vector));
  266. void Transform_Disc PARAMS((OBJECT *Object, TRANSFORM *Trans));
  267. void Invert_Disc PARAMS((OBJECT *Object));
  268. DISC *Create_Disc PARAMS((void));
  269. void Destroy_Disc PARAMS((OBJECT *Object));
  270.  
  271. /* Prototypes for functions defined in hfield.c */
  272. void Find_Hf_Min_Max PARAMS((HEIGHT_FIELD *H_Field, IMAGE *Image));
  273. int Intersect_Sub_Block PARAMS((HF_BLOCK *Block, RAY *Ray, HEIGHT_FIELD *H_Field,
  274.     VECTOR *start, VECTOR *end));
  275. int Intersect_Hf_Node PARAMS((RAY *Ray, HEIGHT_FIELD *H_Field, VECTOR *start, VECTOR *end));
  276. int Intersect_Box PARAMS((HEIGHT_FIELD *H_Field,RAY *Ray,DBL *depth1,DBL *depth2));
  277. DBL Get_Height PARAMS((int x,int y,HEIGHT_FIELD *H_Field));
  278. int Intersect_Pixel PARAMS((int x,int z,RAY *Ray,HEIGHT_FIELD *H_Field,DBL height1,DBL height2));
  279. int All_HeightFld_Intersections PARAMS((OBJECT *Object,RAY *Ray,ISTACK *Depth_Stack));
  280. int All_Csg_HeightFld_Intersections PARAMS((OBJECT *Object,RAY *Ray,ISTACK *Depth_Stack));
  281. int Intersect_HeightFld PARAMS((RAY *Ray,HEIGHT_FIELD *H_Field,DBL *Depth));
  282. int Inside_HeightFld PARAMS((VECTOR *IPoint,OBJECT *Object));
  283. void HeightFld_Normal PARAMS((VECTOR *Result,OBJECT *Object,VECTOR *IPoint));
  284. void *Copy_HeightFld PARAMS((OBJECT *Object));
  285. void Translate_HeightFld PARAMS((OBJECT *Object,VECTOR *Vector));
  286. void Rotate_HeightFld PARAMS((OBJECT *Object,VECTOR *Vector));
  287. void Scale_HeightFld PARAMS((OBJECT *Object,VECTOR *Vector));
  288. void Transform_HeightFld PARAMS((OBJECT *Object,TRANSFORM *Trans));
  289. void Destroy_HeightFld PARAMS((OBJECT *Object));
  290. void Invert_HeightFld PARAMS((OBJECT *Object));
  291. HEIGHT_FIELD *Create_Height_Field PARAMS((void));
  292.  
  293. /* Prototypes for functions defined in triangle.c */
  294. void Find_Triangle_Dominant_Axis PARAMS((TRIANGLE *Triangle));
  295. int Compute_Triangle  PARAMS((TRIANGLE *Triangle, int Smooth));
  296. void Compute_Smooth_Triangle  PARAMS((SMOOTH_TRIANGLE *Triangle));
  297. int All_Triangle_Intersections  PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  298. int Intersect_Triangle  PARAMS((RAY *Ray, TRIANGLE *Triangle, DBL *Depth));
  299. int Inside_Triangle  PARAMS((VECTOR *IPoint, OBJECT *Object));
  300. void Triangle_Normal  PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  301. void *Copy_Triangle  PARAMS((OBJECT *Object));
  302. void Translate_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  303. void Rotate_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  304. void Scale_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  305. void Transform_Triangle  PARAMS((OBJECT *Object, TRANSFORM *Trans));
  306. TRIANGLE *Create_Triangle PARAMS((void));
  307. void Invert_Triangle  PARAMS((OBJECT *Object));
  308. void Smooth_Triangle_Normal  PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  309. void *Copy_Smooth_Triangle PARAMS((OBJECT *Object));
  310. void Translate_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  311. void Rotate_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  312. void Scale_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  313. void Transform_Smooth_Triangle  PARAMS((OBJECT *Object, TRANSFORM *Trans));
  314. void Invert_Smooth_Triangle  PARAMS((OBJECT *Object));
  315. SMOOTH_TRIANGLE *Create_Smooth_Triangle PARAMS((void));
  316. void Destroy_Triangle  PARAMS((OBJECT *Object));
  317.  
  318. /* Prototypes for functions defined in vect.c */
  319. int solve_quadratic PARAMS((DBL *x, DBL *y));
  320. int solve_cubic PARAMS((DBL *x, DBL *y));
  321. int solve_quartic PARAMS((DBL *x, DBL *y));
  322. int polysolve PARAMS((int order, DBL *Coeffs, DBL *roots));
  323.  
  324. /* Prototypes for functions defined in lighting.c */
  325. void Add_Pigment PARAMS((COLOUR *Colour, PIGMENT *Pigment, VECTOR *IPoint));
  326. void Perturb_Normal PARAMS((VECTOR *Layer_Normal, TNORMAL *Tnormal, VECTOR *IPoint));
  327. void Diffuse PARAMS((FINISH *Finish, VECTOR *IPoint, RAY *Eye, VECTOR *Layer_Normal,
  328.  COLOUR *Layer_Colour, COLOUR *Colour,DBL Attenuation, OBJECT *Object));
  329. void Reflect PARAMS((DBL Reflection, VECTOR *IPoint, RAY *Ray, VECTOR *Layer_Normal, COLOUR *Colour));
  330. void Refract PARAMS((TEXTURE *Texture, VECTOR *IPoint, RAY *Ray, VECTOR *Layer_Normal, COLOUR *Colour));
  331. void Fog PARAMS((DBL Distance, COLOUR *Fog_Colour, DBL Fog_Distance, COLOUR *Colour));
  332. void Compute_Reflected_Colour PARAMS ((RAY *Ray, FINISH *Finish,\
  333.  INTERSECTION *Ray_Intersection, COLOUR *Layer_Colour, COLOUR *Filter_Colour,COLOUR *Colour, VECTOR *Layer_Normal));
  334. void Determine_Apparent_Colour PARAMS ((INTERSECTION *Ray_Intersection, COLOUR *Colour, RAY *Ray));
  335. void Filter_Shadow_Ray PARAMS ((INTERSECTION *Ray_Intersection, COLOUR *Colour));
  336.  
  337. /* Prototypes for functions defined in point.c */
  338. int All_Light_Source_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  339. int Inside_Light_Source PARAMS((VECTOR *point, OBJECT *Object));
  340. void Light_Source_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  341. void *Copy_Light_Source PARAMS((OBJECT *Object));
  342. void Translate_Light_Source PARAMS((OBJECT *Object, VECTOR *Vector));
  343. void Rotate_Light_Source PARAMS((OBJECT *Object, VECTOR *Vector));
  344. void Scale_Light_Source PARAMS((OBJECT *Object, VECTOR *Vector));
  345. void Transform_Light_Source PARAMS((OBJECT *Object, TRANSFORM *Trans));
  346. void Invert_Light_Source PARAMS((OBJECT *Object));
  347. void Destroy_Light_Source PARAMS((OBJECT *Object));
  348. LIGHT_SOURCE *Create_Light_Source PARAMS((void));
  349. DBL Attenuate_Light PARAMS((LIGHT_SOURCE *Light_Source, RAY *Light_Source_Ray));
  350. COLOUR **Create_Light_Grid PARAMS((int Size1, int Size2));
  351.  
  352. /* Prototypes for functions defined in texture.c */
  353. void Compute_Colour PARAMS((COLOUR *Colour,PIGMENT *Pigment, DBL value));
  354. void Initialize_Noise PARAMS((void));
  355. void InitTextureTable PARAMS((void));
  356. void InitRTable PARAMS((void));
  357. int R PARAMS((VECTOR *v));
  358. int Crc16 PARAMS((char *buf, int count));
  359. DBL Noise PARAMS((DBL x, DBL y, DBL z));
  360. void DNoise PARAMS((VECTOR *result, DBL x, DBL y, DBL z));
  361. DBL Turbulence PARAMS((DBL x, DBL y, DBL z, DBL omega, DBL lambda, int octaves));
  362. void DTurbulence PARAMS((VECTOR *result, DBL x, DBL y, DBL z, DBL omega, DBL lambda, int octaves));
  363. DBL cycloidal PARAMS((DBL value));
  364. DBL Triangle_Wave PARAMS((DBL value));
  365. void Translate_Textures PARAMS((TEXTURE *Textures, VECTOR *Vector));
  366. void Rotate_Textures PARAMS((TEXTURE *Textures, VECTOR *Vector));
  367. void Scale_Textures PARAMS((TEXTURE *Textures, VECTOR *Vector));
  368. void Transform_Textures PARAMS((TEXTURE *Textures, TRANSFORM *Trans));
  369. void Destroy_Textures PARAMS((TEXTURE *Textures));
  370. void Post_Textures PARAMS((TEXTURE *Textures));
  371. FINISH *Create_Finish PARAMS((void));
  372. FINISH *Copy_Finish PARAMS((FINISH *Old));
  373. TEXTURE *Create_PNF_Texture PARAMS((void));
  374. TILES *Create_Tiles_Texture PARAMS((void));
  375. MATERIAL *Create_Material_Texture PARAMS((void));
  376. TEXTURE *Copy_Textures PARAMS((TEXTURE *Textures));
  377. TEXTURE *Create_Texture PARAMS((void));
  378. TEXTURE *Copy_Materials PARAMS((TEXTURE *Old));
  379.  
  380. /* Prototypes for functions defined in pigment.c */
  381. void agate PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  382. void bozo PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  383. void brick PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  384. void checker PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  385. void gradient PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  386. void granite PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  387. void marble PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  388. void mandel PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  389. void radial PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  390. void spotted PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  391. void wood PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  392. void leopard PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));   /* SWT 7/18/91 */
  393. void onion PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  394. void hexagon PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  395. PIGMENT *Create_Pigment PARAMS((void));
  396. PIGMENT *Copy_Pigment PARAMS((PIGMENT *Old));
  397. void Translate_Pigment PARAMS((PIGMENT *Pigment, VECTOR *Vector));
  398. void Rotate_Pigment PARAMS((PIGMENT *Pigment, VECTOR *Vector));
  399. void Scale_Pigment PARAMS((PIGMENT *Pigment, VECTOR *Vector));
  400. void Transform_Pigment PARAMS((PIGMENT *Pigment, TRANSFORM *Trans));
  401. void Destroy_Pigment PARAMS((PIGMENT *Pigment));
  402. void Post_Pigment PARAMS((PIGMENT *Pigment));
  403.  
  404. /* Prototypes for functions defined in normal.c */
  405. void ripples PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *Vector));
  406. void waves PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *Vector));
  407. void bumps PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal));
  408. void dents PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal));
  409. void wrinkles PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal));
  410. TNORMAL *Create_Tnormal PARAMS((void));
  411. TNORMAL *Copy_Tnormal PARAMS((TNORMAL *Old));
  412. void Translate_Tnormal PARAMS((TNORMAL *Tnormal, VECTOR *Vector));
  413. void Rotate_Tnormal PARAMS((TNORMAL *Tnormal, VECTOR *Vector));
  414. void Scale_Tnormal PARAMS((TNORMAL *Tnormal, VECTOR *Vector));
  415. void Transform_Tnormal PARAMS((TNORMAL *Tnormal, TRANSFORM *Trans));
  416. void Destroy_Tnormal PARAMS((TNORMAL *Tnormal));
  417. void Post_Tnormal PARAMS((TNORMAL *Tnormal));
  418.  
  419. /* Prototypes for functions defined in txttest.c */
  420. void painted1 PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour)); /* CdW 7/2/91 */
  421. void painted2 PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour)); /* CdW 7/2/91 */
  422. void painted3 PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour)); /* CdW 7/2/91 */
  423. void bumpy1 PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal)); /* CdW 7/2/91*/
  424. void bumpy2 PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal)); /* CdW 7/2/91*/
  425. void bumpy3 PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal)); /* CdW 7/2/91*/
  426.  
  427. /* Prototypes for functions defined in image.c */
  428. void image_map PARAMS((DBL x, DBL y, DBL z, PIGMENT *Pigment, COLOUR *colour));
  429. TEXTURE *material_map PARAMS((VECTOR *IPoint, MATERIAL *Texture));
  430. TEXTURE *tiles_texture PARAMS((VECTOR *IPoint, TILES *Texture));
  431. void bump_map PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal));/* CdW 7/8/91*/
  432. void gouge_map PARAMS((DBL x, DBL y, DBL z, TNORMAL *Tnormal, VECTOR *normal));
  433. int map PARAMS((DBL x,DBL y,DBL z, TPATTERN *Turb ,IMAGE *Image,DBL *xcoor, DBL *ycoor));
  434. IMAGE *Copy_Image PARAMS ((IMAGE *Old));
  435. IMAGE *Create_Image PARAMS ((void));
  436. void Destroy_Image PARAMS ((IMAGE *Image));
  437.  
  438. /* Prototypes for functions defined in csg.c */
  439. int All_CSG_Union_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  440. int All_CSG_Merge_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  441. int All_CSG_Intersect_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  442. int Inside_CSG_Union PARAMS((VECTOR *point, OBJECT *Object));
  443. int Inside_CSG_Intersection PARAMS((VECTOR *point, OBJECT *Object));
  444. void *Copy_CSG PARAMS((OBJECT *Object));
  445. void Translate_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  446. void Rotate_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  447. void Scale_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  448. void Transform_CSG PARAMS((OBJECT *Object, TRANSFORM *Trans));
  449. void Destroy_CSG PARAMS((OBJECT *Object));
  450. void Invert_CSG_Union PARAMS((OBJECT *Object));
  451. void Invert_CSG_Intersection PARAMS((OBJECT *Object));
  452. CSG *Create_CSG_Union PARAMS((void));
  453. CSG *Create_CSG_Merge PARAMS((void));
  454. CSG *Create_CSG_Intersection PARAMS((void));
  455. void Compute_CSG_Bounds PARAMS((OBJECT *Object));
  456.  
  457. /* Prototypes for functions defined in colour.c */
  458. COLOUR *Create_Colour PARAMS((void));
  459. COLOUR *Copy_Colour PARAMS((COLOUR *Old));
  460. COLOUR_MAP_ENTRY *Create_CMap_Entries PARAMS((int Map_Size));
  461. COLOUR_MAP_ENTRY *Copy_CMap_Entries PARAMS((COLOUR_MAP_ENTRY *Old,int Map_Size));
  462. COLOUR_MAP *Create_Colour_Map PARAMS((void));
  463. COLOUR_MAP *Copy_Colour_Map PARAMS((COLOUR_MAP *Old));
  464. DBL Colour_Distance PARAMS((COLOUR *colour1, COLOUR *colour2));
  465. void Add_Colour PARAMS((COLOUR *result, COLOUR *colour1, COLOUR *colour2));
  466. void Scale_Colour PARAMS((COLOUR *result, COLOUR *colour, DBL factor));
  467. void Clip_Colour PARAMS((COLOUR *result, COLOUR *colour));
  468. void Destroy_Colour_Map PARAMS((COLOUR_MAP *CMap));
  469.  
  470. /* Prototypes for functions defined in camera.c */
  471. void Translate_Camera PARAMS((CAMERA *Cm, VECTOR *Vector));
  472. void Rotate_Camera PARAMS((CAMERA *Cm, VECTOR *Vector));
  473. void Scale_Camera PARAMS((CAMERA *Cm, VECTOR *Vector));
  474. void Transform_Camera PARAMS((CAMERA *Cm, TRANSFORM *Trans));
  475. CAMERA *Copy_Camera PARAMS((CAMERA *Old));
  476. CAMERA *Create_Camera PARAMS((void));
  477.  
  478. /* Prototypes for functions defined in ray.c */
  479. void Make_Ray PARAMS((RAY *r));
  480. void Initialize_Ray_Containers PARAMS((RAY *Ray));
  481. void Copy_Ray_Containers PARAMS((RAY *Dest_Ray, RAY *Source_Ray));
  482. void Ray_Enter PARAMS((RAY *ray, TEXTURE *texture));
  483. void Ray_Exit PARAMS((RAY *ray));
  484.  
  485. /* Prototypes for functions defined in planes.c */
  486. int All_Plane_Intersections PARAMS((OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack));
  487. int Intersect_Plane PARAMS((RAY *Ray, PLANE *Plane, DBL *Depth));
  488. int Inside_Plane PARAMS((VECTOR *point, OBJECT *Object));
  489. void Plane_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *IPoint));
  490. void *Copy_Plane PARAMS((OBJECT *Object));
  491. void Translate_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  492. void Rotate_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  493. void Scale_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  494. void Transform_Plane PARAMS((OBJECT *Object, TRANSFORM *Trans));
  495. void Invert_Plane PARAMS((OBJECT *Object));
  496. void Destroy_Plane PARAMS((OBJECT *Object));
  497. PLANE *Create_Plane PARAMS((void));
  498.  
  499. /* Prototypes for functions defined in iff.c */
  500. void iff_error PARAMS((void));
  501. int read_byte PARAMS((FILE *f));
  502. int read_word PARAMS((FILE *f));
  503. long read_long PARAMS((FILE *f));
  504. void Read_Chunk_Header PARAMS((FILE *f, CHUNK_HEADER *dest));
  505. void Read_Iff_Image PARAMS((IMAGE *Image, char *filename));
  506.  
  507. /* Prototypes for functions defined in gif.c */
  508. int out_line PARAMS((unsigned char *pixels, int linelen));
  509. int get_byte PARAMS((void));
  510. void Read_Gif_Image PARAMS((IMAGE *Image, char *filename));
  511.  
  512. /* Prototypes for functions defined in gifdecod.c */
  513. void cleanup_gif_decoder PARAMS((void));
  514. WORD init_exp PARAMS((int i_size));   /* changed param to int to avoid
  515.                      problems with 32bit int ANSI
  516.                      compilers. */
  517. WORD get_next_code PARAMS((void));
  518. WORD decoder PARAMS((int i_linewidth)); /* same as above */
  519.  
  520. /* Prototypes for machine specific functions defined in "computer".c (ibm.c amiga.c unix.c etc.)*/
  521. void display_finished PARAMS((void));
  522. void display_init PARAMS((int width, int height));
  523. void display_close PARAMS((void));
  524. void display_plot PARAMS((int x, int y, unsigned char Red, unsigned char Green, unsigned char Blue));
  525.  
  526. /* Prototypes for functions defined in matrices.c */
  527. void MZero PARAMS((MATRIX *result));
  528. void MIdentity PARAMS((MATRIX *result));
  529. void MTimes PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  530. void MAdd PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  531. void MSub PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  532. void MScale PARAMS((MATRIX *result, MATRIX *matrix1, DBL amount));
  533. void MTranspose PARAMS((MATRIX *result, MATRIX *matrix1));
  534. void MTransPoint PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  535. void MInvTransPoint PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  536. void MTransDirection PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  537. void MInvTransDirection PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  538. void MTransNormal PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  539. void MInvTransNormal PARAMS((VECTOR *result, VECTOR *vector, TRANSFORM *trans));
  540. void Compute_Scaling_Transform PARAMS((TRANSFORM *result, VECTOR *vector));
  541. void Compute_Inversion_Transform PARAMS((TRANSFORM *result));
  542. void Compute_Translation_Transform PARAMS((TRANSFORM *transform, VECTOR *vector));
  543. void Compute_Rotation_Transform PARAMS((TRANSFORM *transform, VECTOR *vector));
  544. void Compute_Look_At_Transform PARAMS((TRANSFORM *transform, VECTOR *Look_At, VECTOR *Up, VECTOR *Right));
  545. void Compose_Transforms PARAMS((TRANSFORM *Original_Transform, TRANSFORM *New_Transform));
  546. void Compute_Axis_Rotation_Transform PARAMS((TRANSFORM *transform, VECTOR *V, DBL angle));
  547. void Compute_Coordinate_Transform PARAMS((TRANSFORM *trans, VECTOR *origin, VECTOR *up, DBL r, DBL len));
  548. TRANSFORM *Create_Transform PARAMS((void));
  549. TRANSFORM *Copy_Transform PARAMS((TRANSFORM *Old));
  550. VECTOR *Create_Vector PARAMS((void));
  551. VECTOR *Copy_Vector PARAMS((VECTOR *Old));
  552. DBL *Create_Float PARAMS((void));
  553. DBL *Copy_Float PARAMS((DBL *Old));
  554.  
  555. /* Prototypes for functions defined in dump.c */
  556. FILE_HANDLE *Get_Dump_File_Handle PARAMS((void));
  557. char *Default_Dump_File_Name PARAMS((void));
  558. int Open_Dump_File PARAMS((FILE_HANDLE *handle, char *name,
  559.                            int *width, int *height, int buffer_size, int mode));
  560. void Write_Dump_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  561. int Read_Dump_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  562. int Read_Dump_Int_Line PARAMS((FILE_HANDLE *handle, IMAGE_LINE *line_data, int *line_number));
  563. void Read_Dump_Image PARAMS((IMAGE *Image, char *filename));
  564. void Close_Dump_File PARAMS((FILE_HANDLE *handle));
  565.  
  566. /* Prototypes for functions defined in targa.c */
  567. FILE_HANDLE *Get_Targa_File_Handle PARAMS((void));
  568. char *Default_Targa_File_Name PARAMS((void));
  569. int Open_Targa_File PARAMS((FILE_HANDLE *handle, char *name,
  570.                            int *width, int *height, int buffer_size, int mode));
  571. void Write_Targa_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  572. int Read_Targa_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  573. void Close_Targa_File PARAMS((FILE_HANDLE *handle));
  574. void Read_Targa_Image PARAMS((IMAGE *Image, char *filename));
  575.  
  576. /* Prototypes for functions defined in Raw.c */
  577. FILE_HANDLE *Get_Raw_File_Handle PARAMS((void));
  578. char *Default_Raw_File_Name PARAMS((void));
  579. int Open_Raw_File PARAMS((FILE_HANDLE *handle, char *name,
  580.                            int *width, int *height, int buffer_size, int mode));
  581. void Write_Raw_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  582. int Read_Raw_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  583. void Close_Raw_File PARAMS((FILE_HANDLE *handle));
  584.  
  585. #ifdef DB_CODE
  586.  
  587.  
  588.  
  589.   /* Prototypes for functions defined in addon0.c */
  590.  
  591.   void *new_malloc PARAMS((size_t size));
  592.   void new_free PARAMS((void *pointer, size_t size));
  593.  
  594.   void Init_Additionals_1 PARAMS((void));
  595.   void Init_Additionals_2 PARAMS((void));
  596.   void Draw_Vista_Tree PARAMS((void));
  597.   void Draw_Additional PARAMS((void));
  598.  
  599.   void Fatal_Error PARAMS((char *str));
  600.   void Fatal_MAError PARAMS((char *str));
  601.  
  602.   /* Prototypes for functions defined in addon1.c */
  603.  
  604.   int Intersect_Light_Tree PARAMS((RAY *Ray, PROJECT_TREE_NODE *Vista, int x, int y, INTERSECTION *Best_Intersection, OBJECT **Object));
  605.   void Trace_Primary_Ray PARAMS((RAY *Ray, COLOUR *Colour, int x));
  606.   void Prune_Vista_Tree PARAMS((int y));
  607.  
  608.   /* Prototypes for functions defined in addon2.c */
  609.  
  610.   void Compute_Quadric_BBox PARAMS((QUADRIC *Quadric));
  611.   int Test_Inverted PARAMS((OBJECT *Object));
  612.   void Compute_Plane_Min_Max PARAMS((PLANE *Plane, VECTOR *Min, VECTOR *Max));
  613. #endif
  614.